// 作用：webpack打包的入口文件

// 导入Vue的构造函数
import Vue from 'vue'

// 导入第三方重置样式
import 'normalize.css/normalize.css'

// 导入ElementUI全部组件
import ElementUI from 'element-ui'
// 导入ElementUI整个组件的样式
import 'element-ui/lib/theme-chalk/index.css'
// 导入ElementUI的英文语言包
// import locale from 'element-ui/lib/locale/lang/en' // lang i18n

// 导入自己的样式文件
import '@/styles/index.scss' // global css

// 导入项目根组件
import App from './App'
// 导入 store 实例
import store from './store'
// 导入 router 实例

import router from './router'

// 导入字体图标
import '@/icons' // icon
// 导入权限控制文件
import '@/permission'

// 导入自定义指令模块
import '@/directive'
// 导入全局组件
import PageHeader from '@/components/PageHeader'
import UploadExcel from '@/components/UploadExcel'
// 注册全局组件
Vue.component(UploadExcel.name, UploadExcel)
Vue.component(PageHeader.name, PageHeader)
// 注册ElementUI的全部组件，并提供英文语言模式
// Vue.use(ElementUI, { locale })
// 如果想要中文版 element-ui，按如下方式声明
Vue.use(ElementUI)

Vue.config.productionTip = false

// 实例化 vm 实例
new Vue({
  el: '#app',
  // 注入 router 实例
  router,
  // 注入 store 实例
  store,
  // 渲染函数，把根组件App的内容渲染到id=app的index.html中盒子位置
  render: h => h(App)
})
// 同理knau
// new Vue({
//   router,
//   store,
//   render: h => h(App)
// }).$mount('#app')
// nvm切换node版本：
// 1. 全局安装nvm: npm i nvm -g
// 2. 查看所有node版本: nvm ls
// 3. 切换node版本: nvm use 指定node版本号
// 4. 查看node版本: node -v

// 什么是虚拟DOM为啥用虚拟DOM
// 1.概念：保存了DOM元素关键信息的js对象
// 2.好处:减少比对的次数、大大提高DOM更新的速度

// 什么diff算法及有啥用dfif算法？
// 1.概念：找不同算法
// 2.diff算法：在vue中当数据变了，比对数据变化前后两份虚拟DON的差异
//             找到虚拟变化的地方，把对应的差异映射到真实DOM

// 闭包的概念优缺点
// 概念：两个函数嵌套，内函数用到了外函数的变量，
//      导致外函数的变量不会被释放，延长了外函数的变量的生命周期
// 优点：让变量私有化（局部变量），对外提供访问方法
// 缺点/特点：内存泄漏

// function f() {
//   const a = 1
//   function g() {
//     console.log(a)
//   }
//   g()
// }
// f()

// function f(a) {
//   if (a >= 1) {
//     console.log(a)// 5 4 3 2 1
//     f(--a)//
//   }
//   console.log(a) // 0 0 1 2 3 4
// }
// f(5)

// 字符串的 substr、substring、slice三个方法
// 作用：字符串的截取（提取）
// const str = 'Love'
// console.log(str.substring)
// console.log(str.slice)

// 数据源（对象数组）
// const arr = [
//   {
//     name: 'aaa',
//     str1: '姬霓'
//   }, {
//     name: 'bbb',
//     str1: '小黑'
//   }, {
//     name: 'aaa',
//     str2: '太美'
//   }, {
//     name: 'bbb',
//     str2: '子'
//   }
// ]
// // 需求：把name属性相同的对象做合并，最终得到一个数组
// // 声明空数组
// const list = []
// // 遍历 arr 数组
// arr.forEach((item) => {
//   // 判断list中是否存在item.name属性
//   const i = list.findIndex(obj => obj.name === item.name)
//   // 如果下标不等于-1，说明item中不存在item
//   if (i === -1) {
//     // 直接push到list数组中
//     list.push(item)
//   } else {
//     // 否则，说明item中存在item
//     // 把list中的对象取出来，再和item做个对象合并，最后再赋值会list中
//     list[i] = {
//       ...list[i],
//       ...item
//     }
//   }
// })
// // 打印结果测试
// console.log(list)

// const obj1 = {
//   '入职日期': 44266,
//   '姓名': '宋轶',
//   '工号': 88088,
//   '手机号': 15751786628,
//   '转正日期': 44450
// }

// const zh2Enkey = {
//   '入职日期': 'timeOfEntry',
//   '姓名': 'username',
//   '工号': 88088,
//   '手机号': 15751786628,
//   '转正日期': 'correctionTime'
// }

// 遍历obj1对象，拿到每个中文key对应英文key
// const item = {}
// Object.keys(obj1).forEach(key => {
//   // key;中文key,
//   // 得到英文key
//   const enKey = zh2Enkey[key]
//   console.log(enKey)
//   item[enKey] = obj1[key]
//   console.log(item)
// })
// const obj2 = {
//   timeOfEntry: 44266,
//   username: '宋轶',
//   workNumber: 88088,
//   mobile: 15751786628,
//   correctionTime: 44450
// }
